/**
 * 用于扩展easyui添加iframe格式的tab的能力。
 */
$.extend($.fn.tabs.methods, {
	/**
	 * 根据id查找tab，仅返回唯一Tab
	 */
	findTabById : function(jq, tabId) {
		var tab;
		jq.each(function() {
			var tabs = $(this).tabs("tabs");
			$.each(tabs, function(idx, item) {
				var id = item.panel("options").id;
				if (id == tabId) {
					tab = item;
					return false;
				}
			});
			if (tab) {
				return false;
			}
		});
		return tab;
	},

	/**
	 * 删除一个tab下的iframe，释放内存 tab可以是对象（jquery对象或者dom对象），也可以是tab的id
	 */
	destroyTabIframe : function(jq, tab) {
		return jq.each(function() {
			var $tab;
			if (typeof tab == "string") {// 按tabId进行查询
				$tab = $(this).tabs('findTabById', tab);
			} else {
				$tab = $(tab);
			}

			var $tabBody = $tab.panel('body');
			var $frame = $('iframe', $tabBody);
			if ($frame.length > 0) {
				try {// 跨域会拒绝访问，这里处理掉该异常
					$frame[0].contentWindow.document.write('');
					$frame[0].contentWindow.close();
				} catch (e) {
					// Do nothing
				}
				$frame.remove();
				if ($.browser.msie) {
					CollectGarbage();
				}
			}
			$tabBody.html('');
		});
	},

	/**
	 * 加载iframe内容
	 */
	loadTabIframe : function(jq, params) {
		return jq.each(function() {
			var $tab;
			if (params.id) {
				$tab = $(this).tabs('findTabById', params.id);
			} else {
				$tab = $(this).tabs('getTab', params.which);
			}

			if ($tab == null) {
				return;
			}
			// 释放iframe内在
			$(this).tabs("destroyTabIframe", $tab);

			var $tabBody = $tab.panel('body');
			$tabBody.css({
				'overflow' : 'hidden',
				'position' : 'relative'
			});

			var $mask = $('<div class="tab-iframe-mask"><div>').appendTo($tabBody);
			var $maskMessage = $('<div class="tab-iframe-mask-msg">' + (params.iframe.message || '载入中，请稍候...') + '</div>').appendTo($tabBody);
			var $containterMask = $('<div class="tab-iframe-mask-container"></div>').appendTo($tabBody);
			var $containter = $('<div class="tab-iframe-container "></div>').appendTo($tabBody);

			// 创建iframe的dom元素
			var iframe = $("<iframe></iframe>")[0];
			iframe.src = params.iframe.src;
			iframe.frameBorder = params.iframe.frameBorder || 0;
			iframe.height = params.iframe.height || '100%';
			iframe.width = params.iframe.width || '100%';
			iframe.scrolling = params.iframe.scrolling || 'auto';
			iframe.marginwidth = params.iframe.marginwidth || 0;
			iframe.marginheight = params.iframe.marginheight || 0;

			if (iframe.attachEvent) {
				iframe.attachEvent("onload", function() {
					$([ $mask[0], $maskMessage[0] ]).fadeOut(params.iframe.delay || 'fast', function() {
						$(this).remove();
						if ($(this).hasClass('tab-iframe-mask-msg')) {
							$containterMask.remove();
						}
					});
				});
			} else {
				iframe.onload = function() {
					$([ $mask[0], $maskMessage[0] ]).fadeOut(params.iframe.delay || 'fast', function() {
						$(this).remove();
						if ($(this).hasClass('tab-iframe-mask-msg')) {
							$containterMask.remove();
						}
					});
				};
			}
			$containter[0].appendChild(iframe);
		});
	},

	/**
	 * 增加iframe模式的标签页
	 */
	addIframeTab : function(jq, params) {
		return jq.each(function() {
			if (params.tab.href) {
				delete params.tab.href;
			}
			$(this).tabs('add', params.tab);
			$(this).tabs('loadTabIframe', {
				'id' : params.tab.id,
				'which' : params.tab.title,
				'iframe' : params.iframe
			});
		});
	},

	/**
	 * 更新tab的iframe内容
	 */
	updateIframeTab : function(jq, params) {
		return jq.each(function() {
			params.iframe = params.iframe || {};
			if (!params.iframe.src) {// 如果没有提供iframe的src参数，则从已有的iframe中提取
				var $tab;
				if (params.id) {
					$tab = $(this).tabs('findTabById', params.id);
				} else {
					$tab = $(this).tabs('getTab', params.which);
				}
				if ($tab == null) {
					return;
				}
				var $tabBody = $tab.panel('body');
				var $iframe = $tabBody.find('iframe');
				if ($iframe.length === 0) {
					return;
				}
				$.extend(params.iframe, {
					'src' : $iframe.attr('src')
				});
			}
			$(this).tabs('loadTabIframe', params);
		});
	}
});
